SPDX-FileCopyrightText: 2021 Johan Kouaho & Jacques Martens SPDX-FileCopyrightText: 2024 AlICe laboratory https://alicelab.be
SPDX-License-Identifier: GPL-3.0-or-later
KOUAHO_MARTENS_REICH_blenderV.2.93.5_Mac
IMPORT & PURGE
import bpy
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete(use_global=False)
from random import randintDEFINITION OF LISTS
define the list of voices
def get_objects(VoixI):
res = []
for obj in bpy.data.objects:
if VoixI in obj.name:
res.append(obj)
return resdefine the action of the boolean
def bool(obj1, obj2):
bool = obj2.modifiers.new(name="booly", type="BOOLEAN")
bool.object = obj1
bool.operation = "INTERSECT"def multi_boolean(VoixI, object):
for t in VoixsI:
bool(object, t)define the action of applying the boolean https://blenderartists.org/t/how-to-apply-all-the-modifiers-with-python/1314483/2
def apply_modifiers(obj):
ctx = bpy.context.copy()
ctx["object"] = obj
for _, m in enumerate(obj.modifiers):
try:
ctx["modifier"] = m
bpy.ops.object.modifier_apply(ctx, modifier=m.name)
except RuntimeError:
print(f"Error applying {m.name} to {obj.name}, removing it instead.")
obj.modifiers.remove(m)
for m in obj.modifiers:
obj.modifiers.remove(m)CREATION OF OBJECTS
Set a point in the partition to rotate & size
position = randint(-50, -10)
print(position)
rotation = randint(1, 2)
print(rotation)
taille = randint(5, 6)
print(taille)VoiceI
for i in range(0, 200):
bpy.ops.mesh.primitive_cube_add(
size=1,
location=(3.75, round(i * 0.25 + position, 2), 5),
scale=(taille, 0.1, 10),
)
bpy.context.object.name = "VoixI"VoiceII
for i in range(0, 200):
bpy.ops.mesh.primitive_cube_add(
size=1,
location=(1.25, round(i * 0.25 + position, 2), 5),
scale=(taille, 0.1, 10),
)
bpy.context.object.rotation_euler[2] = round(-0.15708 * (rotation / 8) * i, 2)
bpy.context.object.name = "VoixII"VoiceIII
for i in range(0, 200):
bpy.ops.mesh.primitive_cube_add(
size=1,
location=(-1.25, round(i * 0.25 + position, 2), 7),
scale=(taille, 0.1, 6),
)
bpy.context.object.rotation_euler[2] = round(-0.15708 * (rotation / 4) * i, 2)
bpy.context.object.name = "VoixIII"VoiceIV
for i in range(0, 200):
bpy.ops.mesh.primitive_cube_add(
size=1,
location=(-3.75, round(i * 0.25 + position, 2), 9),
scale=(taille, 0.1, 3),
)
bpy.context.object.rotation_euler[2] = round(-0.15708 * (rotation / 2) * i, 2)
bpy.context.object.name = "VoixIII"Cube 10.10.10 for boolean
bpy.ops.mesh.primitive_cube_add(location=(0, 0, 5), scale=(5, 5, 5))Affection de noms
cube = bpy.context.scene.objects.get("Cube")
VoixsI = get_objects("VoixI")
multi_boolean(VoixsI, cube)APPLICATION & REMOVAL
Application
for obj in VoixsI:
apply_modifiers(obj)Deleting the cube
bpy.ops.object.select_all(action="DESELECT")
cube.select_set(True)
bpy.ops.object.delete(use_global=False)END